Use new code style

This commit is contained in:
David Stone
2025-02-07 19:02:33 -07:00
parent 0181024ae1
commit 8433379d90
672 changed files with 37107 additions and 45249 deletions

View File

@ -11,9 +11,9 @@
namespace WP_Ultimo\Managers;
use \WP_Ultimo\Managers\Base_Manager;
use WP_Ultimo\Managers\Base_Manager;
use WP_Ultimo\Models\Base_Model;
use \WP_Ultimo\Models\Event;
use WP_Ultimo\Models\Event;
// Exit if accessed directly
defined('ABSPATH') || exit;
@ -25,7 +25,9 @@ defined('ABSPATH') || exit;
*/
class Event_Manager extends Base_Manager {
use \WP_Ultimo\Apis\Rest_Api, \WP_Ultimo\Apis\WP_CLI, \WP_Ultimo\Traits\Singleton;
use \WP_Ultimo\Apis\Rest_Api;
use \WP_Ultimo\Apis\WP_CLI;
use \WP_Ultimo\Traits\Singleton;
/**
* The manager slug.
@ -80,8 +82,7 @@ class Event_Manager extends Base_Manager {
add_action('wu_model_post_save', array($this, 'log_transitions'), 10, 4);
add_action('wu_daily', array($this, 'clean_old_events'));
} // end init;
}
/**
* Returns the payload to be displayed in the payload preview field.
@ -98,45 +99,41 @@ class Event_Manager extends Base_Manager {
public function log_transitions($model, $data, $data_unserialized, $object) {
if ($model === 'event') {
return;
} // end if;
}
/*
* Editing Model
*/
if (wu_get_isset($data_unserialized, 'id')) {
$original = $object->_get_original();
$diff = wu_array_recursive_diff($data_unserialized, $original);
$keys_to_remove = apply_filters('wu_exclude_transitions_keys', array(
'meta',
'last_login',
'ips',
'query_class',
'settings',
'_compiled_product_list',
'_gateway_info',
'_limitations',
));
$keys_to_remove = apply_filters(
'wu_exclude_transitions_keys',
array(
'meta',
'last_login',
'ips',
'query_class',
'settings',
'_compiled_product_list',
'_gateway_info',
'_limitations',
)
);
foreach ($keys_to_remove as $key_to_remove) {
unset($diff[$key_to_remove]);
} // end foreach;
unset($diff[ $key_to_remove ]);
}
/**
* If empty, go home.
*/
if (empty($diff)) {
return;
} // end if;
}
$changed = array();
@ -144,27 +141,21 @@ class Event_Manager extends Base_Manager {
* Loop changed data.
*/
foreach ($diff as $key => $new_value) {
$old_value = wu_get_isset($original, $key, '');
if ($key === 'id' && intval($old_value) === 0) {
return;
} // end if;
}
if (empty(json_encode($old_value)) && empty(json_encode($new_value))) {
return;
}
} // end if;
$changed[$key] = array(
$changed[ $key ] = array(
'old_value' => $old_value,
'new_value' => $new_value,
);
} // end foreach;
}
$event_data = array(
'severity' => Event::SEVERITY_INFO,
@ -173,9 +164,7 @@ class Event_Manager extends Base_Manager {
'object_id' => $object->get_id(),
'payload' => $changed,
);
} else {
$event_data = array(
'severity' => Event::SEVERITY_INFO,
'slug' => 'created',
@ -183,19 +172,15 @@ class Event_Manager extends Base_Manager {
'object_id' => $object->get_id(),
'payload' => array(),
);
}
} // end if;
if (!empty($_POST) && is_user_logged_in()) {
if ( ! empty($_POST) && is_user_logged_in()) {
$event_data['initiator'] = 'manual';
$event_data['author_id'] = get_current_user_id();
} // end if;
}
return wu_create_event($event_data);
} // end log_transitions;
}
/**
* Returns the payload to be displayed in the payload preview field.
@ -205,37 +190,28 @@ class Event_Manager extends Base_Manager {
*/
public function event_payload_preview() {
if (!wu_request('event')) {
if ( ! wu_request('event')) {
wp_send_json_error(new \WP_Error('error', __('No event was selected.', 'wp-ultimo')));
} // end if;
}
$slug = wu_request('event');
if (!$slug) {
if ( ! $slug) {
wp_send_json_error(new \WP_Error('not-found', __('Event was not found.', 'wp-ultimo')));
} // end if;
}
$event = wu_get_event_type($slug);
if (!$event) {
if ( ! $event) {
wp_send_json_error(new \WP_Error('not-found', __('Data not found.', 'wp-ultimo')));
} else {
$payload = isset($event['payload']) ? wu_maybe_lazy_load_payload($event['payload']) : '{}';
$payload = array_map('htmlentities2', $payload);
wp_send_json_success($payload);
} // end if;
} // end event_payload_preview;
}
}
/**
* Returns the list of event types to register.
@ -263,8 +239,7 @@ class Event_Manager extends Base_Manager {
$types = array_filter($types, fn($item) => $item['hidden'] === false);
return $types;
} // end get_event_type_as_options;
}
/**
* Add a new event.
@ -280,23 +255,17 @@ class Event_Manager extends Base_Manager {
$registered_event = $this->get_event($slug);
if (!$registered_event) {
if ( ! $registered_event) {
return array('error' => 'Event not found');
} // end if;
}
$payload_diff = array_diff_key(wu_maybe_lazy_load_payload($registered_event['payload']), $payload);
if (isset($payload_diff[0])) {
foreach ($payload_diff[0] as $diff_key => $diff_value) {
return array('error' => 'Param required:' . $diff_key);
} // end foreach;
} // end if;
}
}
$payload['wu_version'] = wu_get_version();
@ -308,8 +277,7 @@ class Event_Manager extends Base_Manager {
* Saves in the database
*/
$this->save_event($slug, $payload);
} // end do_event;
}
/**
* Register a new event to be used as param.
@ -323,11 +291,10 @@ class Event_Manager extends Base_Manager {
*/
public function register_event($slug, $args): bool {
$this->events[$slug] = $args;
$this->events[ $slug ] = $args;
return true;
} // end register_event;
}
/**
* Returns the list of available webhook events.
@ -338,8 +305,7 @@ class Event_Manager extends Base_Manager {
public function get_events() {
return $this->events;
} // end get_events;
}
/**
* Returns the list of available webhook events.
@ -354,22 +320,15 @@ class Event_Manager extends Base_Manager {
$events = $this->get_events();
if ($events) {
foreach ($events as $key => $event) {
if ($key === $slug) {
return $event;
} // end if;
} // end foreach;
} // end if;
}
}
}
return false;
} // end get_event;
}
/**
* Saves event in the database.
@ -380,18 +339,19 @@ class Event_Manager extends Base_Manager {
*/
public function save_event($slug, $payload) {
$event = new Event(array(
'object_id' => wu_get_isset($payload, 'object_id', ''),
'object_type' => wu_get_isset($payload, 'object_type', ''),
'severity' => wu_get_isset($payload, 'type', Event::SEVERITY_INFO),
'date_created' => wu_get_current_time('mysql', true),
'slug' => strtolower($slug),
'payload' => $payload,
));
$event = new Event(
array(
'object_id' => wu_get_isset($payload, 'object_id', ''),
'object_type' => wu_get_isset($payload, 'object_type', ''),
'severity' => wu_get_isset($payload, 'type', Event::SEVERITY_INFO),
'date_created' => wu_get_current_time('mysql', true),
'slug' => strtolower($slug),
'payload' => $payload,
)
);
$event->save();
} // end save_event;
}
/**
* Registers the list of default events.
@ -404,80 +364,94 @@ class Event_Manager extends Base_Manager {
/**
* Payment Received.
*/
wu_register_event_type('payment_received', array(
'name' => __('Payment Received', 'wp-ultimo'),
'desc' => __('This event is fired every time a new payment is received, regardless of the payment status.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_register_event_type(
'payment_received',
array(
'name' => __('Payment Received', 'wp-ultimo'),
'desc' => __('This event is fired every time a new payment is received, regardless of the payment status.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_generate_event_payload('payment'),
wu_generate_event_payload('membership'),
wu_generate_event_payload('customer')
),
'deprecated_args' => array(
'user_id' => 'customer_user_id',
'amount' => 'payment_total',
'gateway' => 'payment_gateway',
'status' => 'payment_status',
'date' => 'payment_date_created',
),
));
'deprecated_args' => array(
'user_id' => 'customer_user_id',
'amount' => 'payment_total',
'gateway' => 'payment_gateway',
'status' => 'payment_status',
'date' => 'payment_date_created',
),
)
);
/**
* Site Published.
*/
wu_register_event_type('site_published', array(
'name' => __('Site Published', 'wp-ultimo'),
'desc' => __('This event is fired every time a new site is created tied to a membership, or transitions from a pending state to a published state.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_register_event_type(
'site_published',
array(
'name' => __('Site Published', 'wp-ultimo'),
'desc' => __('This event is fired every time a new site is created tied to a membership, or transitions from a pending state to a published state.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_generate_event_payload('site'),
wu_generate_event_payload('customer'),
wu_generate_event_payload('membership')
),
'deprecated_args' => array(),
));
'deprecated_args' => array(),
)
);
/**
* Confirm Email Address
*/
wu_register_event_type('confirm_email_address', array(
'name' => __('Email Verification Needed', 'wp-ultimo'),
'desc' => __('This event is fired every time a new customer is added with an email verification status of pending.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_register_event_type(
'confirm_email_address',
array(
'name' => __('Email Verification Needed', 'wp-ultimo'),
'desc' => __('This event is fired every time a new customer is added with an email verification status of pending.', 'wp-ultimo'),
'payload' => fn() => array_merge(
array(
'verification_link' => 'https://linktoverifyemail.com',
),
wu_generate_event_payload('customer')
),
'deprecated_args' => array(),
));
'deprecated_args' => array(),
)
);
/**
* Domain Mapping Added
*/
wu_register_event_type('domain_created', array(
'name' => __('New Domain Mapping Added', 'wp-ultimo'),
'desc' => __('This event is fired every time a new domain mapping is added by a customer.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_register_event_type(
'domain_created',
array(
'name' => __('New Domain Mapping Added', 'wp-ultimo'),
'desc' => __('This event is fired every time a new domain mapping is added by a customer.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_generate_event_payload('domain'),
wu_generate_event_payload('site'),
wu_generate_event_payload('membership'),
wu_generate_event_payload('customer')
),
'deprecated_args' => array(
'user_id' => 1,
'user_site_id' => 1,
'mapped_domain' => 'mydomain.com',
'user_site_url' => 'http://test.mynetwork.com/',
'network_ip' => '125.399.3.23',
),
));
'deprecated_args' => array(
'user_id' => 1,
'user_site_id' => 1,
'mapped_domain' => 'mydomain.com',
'user_site_url' => 'http://test.mynetwork.com/',
'network_ip' => '125.399.3.23',
),
)
);
/**
* Renewal payment created
*/
wu_register_event_type('renewal_payment_created', array(
'name' => __('New Renewal Payment Created', 'wp-ultimo'),
'desc' => __('This event is fired every time a new renewal payment is created by WP Multisite WaaS.', 'wp-ultimo'),
'payload' => fn() => array_merge(
wu_register_event_type(
'renewal_payment_created',
array(
'name' => __('New Renewal Payment Created', 'wp-ultimo'),
'desc' => __('This event is fired every time a new renewal payment is created by WP Multisite WaaS.', 'wp-ultimo'),
'payload' => fn() => array_merge(
array(
'default_payment_url' => 'https://linktopayment.com',
),
@ -485,31 +459,30 @@ class Event_Manager extends Base_Manager {
wu_generate_event_payload('membership'),
wu_generate_event_payload('customer')
),
'deprecated_args' => array(),
));
'deprecated_args' => array(),
)
);
$models = $this->models_events;
foreach ($models as $model => $params) {
foreach ($params['types'] as $type) {
wu_register_event_type($model . '_' . $type, array(
'name' => sprintf(__('%1$s %2$s', 'wp-ultimo'), $params['label'], ucfirst($type)),
'desc' => sprintf(__('This event is fired every time a %1$s is %2$s by WP Multisite WaaS.', 'wp-ultimo'), $params['label'], $type),
'deprecated_args' => array(),
'payload' => fn() => $this->get_model_payload($model),
));
} // end foreach;
wu_register_event_type(
$model . '_' . $type,
array(
'name' => sprintf(__('%1$s %2$s', 'wp-ultimo'), $params['label'], ucfirst($type)),
'desc' => sprintf(__('This event is fired every time a %1$s is %2$s by WP Multisite WaaS.', 'wp-ultimo'), $params['label'], $type),
'deprecated_args' => array(),
'payload' => fn() => $this->get_model_payload($model),
)
);
}
add_action("wu_{$model}_post_save", array($this, 'dispatch_base_model_event'), 10, 3);
} // end foreach;
}
do_action('wu_register_all_events');
} // end register_all_events;
}
/**
* Register models events
@ -523,12 +496,11 @@ class Event_Manager extends Base_Manager {
$instance = self::get_instance();
$instance->models_events[$slug] = array(
$instance->models_events[ $slug ] = array(
'label' => $label,
'types' => $event_types,
);
} // end register_model_events;
}
/**
* Dispatch registered model events
@ -547,17 +519,14 @@ class Event_Manager extends Base_Manager {
$registered_model = wu_get_isset($this->models_events, $model);
if (!$registered_model || !in_array($type, $registered_model['types'], true)) {
if ( ! $registered_model || ! in_array($type, $registered_model['types'], true)) {
return;
} // end if;
}
$payload = $this->get_model_payload($model, $obj);
wu_do_event($model . '_' . $type, $payload);
} // end dispatch_base_model_event;
}
/**
* Returns the full payload for a given model.
@ -574,31 +543,25 @@ class Event_Manager extends Base_Manager {
$payload = wu_generate_event_payload($model, $obj);
if (method_exists($obj, 'get_membership')) {
$membership = $model_object ? $obj->get_membership() : false;
$payload = array_merge(
$payload,
wu_generate_event_payload('membership', $membership)
);
} // end if;
}
if (method_exists($obj, 'get_customer')) {
$customer = $model_object ? $obj->get_customer() : false;
$payload = array_merge(
$payload,
wu_generate_event_payload('customer', $customer)
);
} // end if;
}
if (method_exists($obj, 'get_billing_address') || method_exists($obj, 'get_membership')) {
if ($model_object) {
$payload = method_exists($obj, 'get_billing_address')
? array_merge(
$payload,
@ -607,23 +570,21 @@ class Event_Manager extends Base_Manager {
$payload,
$obj->get_membership()->get_billing_address()->to_array()
);
} else {
$payload = array_merge(
$payload,
array_map(function () {
return '';
}, \WP_Ultimo\Objects\Billing_Address::fields())
array_map(
function () {
return '';
},
\WP_Ultimo\Objects\Billing_Address::fields()
)
);
} // end if;
} // end if;
}
}
return $payload;
} // end get_model_payload;
}
/**
* Every day, deletes old events that we don't want to keep.
@ -638,39 +599,34 @@ class Event_Manager extends Base_Manager {
$threshold_days = apply_filters('wu_events_threshold_days', 1);
if (empty($threshold_days)) {
return false;
}
} // end if;
$events_to_remove = wu_get_events(array(
'number' => 100,
'date_query' => array(
'column' => 'date_created',
'before' => "-{$threshold_days} days",
'inclusive' => true,
),
));
$events_to_remove = wu_get_events(
array(
'number' => 100,
'date_query' => array(
'column' => 'date_created',
'before' => "-{$threshold_days} days",
'inclusive' => true,
),
)
);
$success_count = 0;
foreach ($events_to_remove as $event) {
$status = $event->delete();
if (!is_wp_error($status) && $status) {
$success_count++;
} // end if;
} // end foreach;
if ( ! is_wp_error($status) && $status) {
++$success_count;
}
}
wu_log_add('wu-cron', sprintf(__('Removed %1$d events successfully. Failed to remove %2$d events.', 'wp-ultimo'), $success_count, count($events_to_remove) - $success_count));
return true;
} // end clean_old_events;
}
/**
* Create a endpoint to retrieve all available event hooks.
@ -681,21 +637,22 @@ class Event_Manager extends Base_Manager {
*/
public function hooks_endpoint() {
if (!wu_get_setting('enable_api', true)) {
if ( ! wu_get_setting('enable_api', true)) {
return;
} // end if;
}
$api = \WP_Ultimo\API::get_instance();
register_rest_route($api->get_namespace(), '/hooks', array(
'methods' => 'GET',
'callback' => array($this, 'get_hooks_rest'),
'permission_callback' => array($api, 'check_authorization'),
));
} // end hooks_endpoint;
register_rest_route(
$api->get_namespace(),
'/hooks',
array(
'methods' => 'GET',
'callback' => array($this, 'get_hooks_rest'),
'permission_callback' => array($api, 'check_authorization'),
)
);
}
/**
* Return all event types for the REST API request.
@ -710,19 +667,13 @@ class Event_Manager extends Base_Manager {
$response = wu_get_event_types();
foreach ($response as $key => $value) {
$payload = wu_get_isset($value, 'payload');
if (is_callable($payload)) {
$response[$key]['payload'] = $payload();
} // end if;
} // end foreach;
$response[ $key ]['payload'] = $payload();
}
}
return rest_ensure_response($response);
} // end get_hooks_rest;
} // end class Event_Manager;
}
}