woocommerce/plugins/woocommerce-admin/src/Events.php

139 lines
4.6 KiB
PHP
Raw Normal View History

<?php
/**
2019-05-14 22:08:13 +00:00
* Handle cron events.
* NOTE: DO NOT edit this file in WooCommerce core, this is generated from woocommerce-admin.
*/
2019-08-06 19:36:15 +00:00
namespace Automattic\WooCommerce\Admin;
defined( 'ABSPATH' ) || exit;
use \Automattic\WooCommerce\Admin\Notes\Choose_Niche;
use \Automattic\WooCommerce\Admin\Notes\Giving_Feedback_Notes;
use \Automattic\WooCommerce\Admin\Notes\Mobile_App;
use \Automattic\WooCommerce\Admin\Notes\New_Sales_Record;
use \Automattic\WooCommerce\Admin\Notes\Tracking_Opt_In;
use \Automattic\WooCommerce\Admin\Notes\Onboarding_Email_Marketing;
use \Automattic\WooCommerce\Admin\Notes\Onboarding_Payments;
use \Automattic\WooCommerce\Admin\Notes\Personalize_Store;
use \Automattic\WooCommerce\Admin\Notes\EU_VAT_Number;
use \Automattic\WooCommerce\Admin\Notes\WooCommerce_Payments;
use \Automattic\WooCommerce\Admin\Notes\Marketing;
use \Automattic\WooCommerce\Admin\Notes\Start_Dropshipping_Business;
use \Automattic\WooCommerce\Admin\Notes\WooCommerce_Subscriptions;
use \Automattic\WooCommerce\Admin\Notes\Migrate_From_Shopify;
use \Automattic\WooCommerce\Admin\Notes\Launch_Checklist;
use \Automattic\WooCommerce\Admin\Notes\Real_Time_Order_Alerts;
Remote inbox notification delivery (https://github.com/woocommerce/woocommerce-admin/pull/4143) * Poll and persist specs * Process specs into admin notes * Add send at time rule processor * Fix style issues * Clear actions before recreating them to avoid dupes * Trigger the RINDS engine when a plugin is activated * Unit test SendAtTimeRuleProcessor * Implement plugins activated rule processor * Don't throw exception for unrecognised rule type. Also unit test around this. * add url_is_action_query to tell whether to wrap the URL in wc_admin_url() call or not * Add NOT rule * revert change to install.php * Drop unimplemented resend after dismissal rule * Add OR rule * Explicitly make "fail" a type of rule that can be applied to a spec * Add plugin version rule processor * Tidy up, don't need to pass $spec everywhere * Remove meta record for action state - not really needed * Move spec runner into it's own class, add some checks around re-unactioning a note * Replace if..else with switch * Just update the option * Check that the JSON coming in is an array * Change OR rule to accept an array of operands * Add Pass rule processor * Fix specs that are initially not published * Rename send at rule to publish after * Add publish before rule * Remove unused interface * Can't use PHP7's anonymous classes * New notification: How to draw attention to your online store * Add feature flag for rule-base inbox notes * rename everything to RemoteInboxNotifications from RINDS * Fix merge fail * fix test * Change preunactioned to pending * Move feature flag check into Events.php * Refactor reading a data source * Rename poll_data_sources function * Refactor EvaluateAndGetStatus::evaluate to take the rule evaluator directly * Check that the response body exists * Add validation and defensive checks * Add rule processor interface * Update note created time on status change * Move non-test dependencies into processor constructors * Update to proposed live URL * Remove setting icon as it's being deprecated Co-authored-by: Rebecca Scott <me@becdetat.com>
2020-06-05 01:51:25 +00:00
use \Automattic\WooCommerce\Admin\RemoteInboxNotifications\DataSourcePoller;
use \Automattic\WooCommerce\Admin\RemoteInboxNotifications\RemoteInboxNotificationsEngine;
use \Automattic\WooCommerce\Admin\Loader;
use \Automattic\WooCommerce\Admin\Notes\Insight_First_Sale;
use \Automattic\WooCommerce\Admin\Notes\Home_Screen_Feedback;
use \Automattic\WooCommerce\Admin\Notes\Need_Some_Inspiration;
use \Automattic\WooCommerce\Admin\Notes\Online_Clothing_Store;
use \Automattic\WooCommerce\Admin\Notes\First_Product;
use \Automattic\WooCommerce\Admin\Notes\Customize_Store_With_Blocks;
use \Automattic\WooCommerce\Admin\Notes\Google_Ads_And_Marketing;
use \Automattic\WooCommerce\Admin\Notes\Test_Checkout;
use \Automattic\WooCommerce\Admin\Notes\Edit_Products_On_The_Move;
use \Automattic\WooCommerce\Admin\Notes\Performance_On_Mobile;
use \Automattic\WooCommerce\Admin\Notes\Manage_Orders_On_The_Go;
2019-08-06 19:36:15 +00:00
/**
* WC_Admin_Events Class.
*/
class Events {
/**
* The single instance of the class.
*
* @var object
*/
protected static $instance = null;
/**
* Constructor
*
* @return void
*/
protected function __construct() {}
/**
* Get class instance.
*
* @return object Instance.
*/
final public static function instance() {
if ( null === static::$instance ) {
static::$instance = new static();
}
return static::$instance;
}
/**
* Cron event handlers.
*/
public function init() {
2019-05-14 22:09:02 +00:00
add_action( 'wc_admin_daily', array( $this, 'do_wc_admin_daily' ) );
}
/**
* Daily events to run.
*
* Note: Order_Milestones::other_milestones is hooked to this as well.
*/
2019-06-12 02:37:45 +00:00
public function do_wc_admin_daily() {
New_Sales_Record::possibly_add_note();
Mobile_App::possibly_add_note();
Tracking_Opt_In::possibly_add_note();
Onboarding_Email_Marketing::possibly_add_note();
Onboarding_Payments::possibly_add_note();
Personalize_Store::possibly_add_note();
WooCommerce_Payments::possibly_add_note();
EU_VAT_Number::possibly_add_note();
Marketing::possibly_add_note();
Giving_Feedback_Notes::possibly_add_note();
Start_Dropshipping_Business::possibly_add_note();
WooCommerce_Subscriptions::possibly_add_note();
Migrate_From_Shopify::possibly_add_note();
Insight_First_Sale::possibly_add_note();
Launch_Checklist::possibly_add_note();
Home_Screen_Feedback::possibly_add_note();
Need_Some_Inspiration::possibly_add_note();
Online_Clothing_Store::possibly_add_note();
First_Product::possibly_add_note();
Choose_Niche::possibly_add_note();
Real_Time_Order_Alerts::possibly_add_note();
Customize_Store_With_Blocks::possibly_add_note();
Google_Ads_And_Marketing::possibly_add_note();
Test_Checkout::possibly_add_note();
Edit_Products_On_The_Move::possibly_add_note();
Performance_On_Mobile::possibly_add_note();
Manage_Orders_On_The_Go::possibly_add_note();
Remote inbox notification delivery (https://github.com/woocommerce/woocommerce-admin/pull/4143) * Poll and persist specs * Process specs into admin notes * Add send at time rule processor * Fix style issues * Clear actions before recreating them to avoid dupes * Trigger the RINDS engine when a plugin is activated * Unit test SendAtTimeRuleProcessor * Implement plugins activated rule processor * Don't throw exception for unrecognised rule type. Also unit test around this. * add url_is_action_query to tell whether to wrap the URL in wc_admin_url() call or not * Add NOT rule * revert change to install.php * Drop unimplemented resend after dismissal rule * Add OR rule * Explicitly make "fail" a type of rule that can be applied to a spec * Add plugin version rule processor * Tidy up, don't need to pass $spec everywhere * Remove meta record for action state - not really needed * Move spec runner into it's own class, add some checks around re-unactioning a note * Replace if..else with switch * Just update the option * Check that the JSON coming in is an array * Change OR rule to accept an array of operands * Add Pass rule processor * Fix specs that are initially not published * Rename send at rule to publish after * Add publish before rule * Remove unused interface * Can't use PHP7's anonymous classes * New notification: How to draw attention to your online store * Add feature flag for rule-base inbox notes * rename everything to RemoteInboxNotifications from RINDS * Fix merge fail * fix test * Change preunactioned to pending * Move feature flag check into Events.php * Refactor reading a data source * Rename poll_data_sources function * Refactor EvaluateAndGetStatus::evaluate to take the rule evaluator directly * Check that the response body exists * Add validation and defensive checks * Add rule processor interface * Update note created time on status change * Move non-test dependencies into processor constructors * Update to proposed live URL * Remove setting icon as it's being deprecated Co-authored-by: Rebecca Scott <me@becdetat.com>
2020-06-05 01:51:25 +00:00
if ( $this->is_remote_inbox_notifications_enabled() ) {
Remote inbox notification delivery (https://github.com/woocommerce/woocommerce-admin/pull/4143) * Poll and persist specs * Process specs into admin notes * Add send at time rule processor * Fix style issues * Clear actions before recreating them to avoid dupes * Trigger the RINDS engine when a plugin is activated * Unit test SendAtTimeRuleProcessor * Implement plugins activated rule processor * Don't throw exception for unrecognised rule type. Also unit test around this. * add url_is_action_query to tell whether to wrap the URL in wc_admin_url() call or not * Add NOT rule * revert change to install.php * Drop unimplemented resend after dismissal rule * Add OR rule * Explicitly make "fail" a type of rule that can be applied to a spec * Add plugin version rule processor * Tidy up, don't need to pass $spec everywhere * Remove meta record for action state - not really needed * Move spec runner into it's own class, add some checks around re-unactioning a note * Replace if..else with switch * Just update the option * Check that the JSON coming in is an array * Change OR rule to accept an array of operands * Add Pass rule processor * Fix specs that are initially not published * Rename send at rule to publish after * Add publish before rule * Remove unused interface * Can't use PHP7's anonymous classes * New notification: How to draw attention to your online store * Add feature flag for rule-base inbox notes * rename everything to RemoteInboxNotifications from RINDS * Fix merge fail * fix test * Change preunactioned to pending * Move feature flag check into Events.php * Refactor reading a data source * Rename poll_data_sources function * Refactor EvaluateAndGetStatus::evaluate to take the rule evaluator directly * Check that the response body exists * Add validation and defensive checks * Add rule processor interface * Update note created time on status change * Move non-test dependencies into processor constructors * Update to proposed live URL * Remove setting icon as it's being deprecated Co-authored-by: Rebecca Scott <me@becdetat.com>
2020-06-05 01:51:25 +00:00
DataSourcePoller::read_specs_from_data_sources();
RemoteInboxNotificationsEngine::run();
}
}
/**
* Checks if remote inbox notifications are enabled.
*
* @return bool Whether remote inbox notifications are enabled.
*/
protected function is_remote_inbox_notifications_enabled() {
// Check if the feature flag is disabled.
if ( ! Loader::is_feature_enabled( 'remote-inbox-notifications' ) ) {
return false;
}
// Check if the site has opted out of marketplace suggestions.
if ( 'yes' !== get_option( 'woocommerce_show_marketplace_suggestions', 'yes' ) ) {
return false;
}
// All checks have passed.
return true;
}
}