Current File : /home/bravrvjk/itiministry.org/wp-content/plugins/give/src/Subscriptions//ServiceProvider.php
<?php
namespace Give\Subscriptions;
use Give\Framework\Migrations\MigrationsRegister;
use Give\Helpers\Hooks;
use Give\ServiceProviders\ServiceProvider as ServiceProviderInterface;
use Give\Subscriptions\Actions\LoadSubscriptionAdminOptions;
use Give\Subscriptions\LegacyListeners\DispatchGiveSubscriptionPostCreate;
use Give\Subscriptions\LegacyListeners\DispatchGiveSubscriptionPreCreate;
use Give\Subscriptions\ListTable\SubscriptionsListTable;
use Give\Subscriptions\Migrations\AddCampaignId;
use Give\Subscriptions\Migrations\AddCampaignIdColumn;
use Give\Subscriptions\Migrations\AddPaymentModeToSubscriptionTable;
use Give\Subscriptions\Migrations\BackfillMissingCampaignIdForDonations;
use Give\Subscriptions\Migrations\CreateSubscriptionTables;
use Give\Subscriptions\Migrations\UpdateProductID;
use Give\Subscriptions\Repositories\SubscriptionNotesRepository;
use Give\Subscriptions\Repositories\SubscriptionRepository;
class ServiceProvider implements ServiceProviderInterface
{
/**
* @inheritDoc
*
* @since 4.8.0 Register Subscription Repository to container
*/
public function register()
{
give()->singleton('subscriptions', SubscriptionRepository::class);
give()->singleton('subscriptionNotes', SubscriptionNotesRepository::class);
give()->singleton(SubscriptionsListTable::class, function() {
$listTable = new SubscriptionsListTable();
Hooks::doAction('givewp_subscriptions_list_table', $listTable);
return $listTable;
});
}
/**
* @inheritDoc
*
* @since 4.14.0 move subscription page registration to method to defer conditionals and DB queries to appropriate hooks.
*/
public function boot()
{
$this->bootLegacyListeners();
$this->registerMigrations();
$this->registerSubscriptionAdminOptions();
$this->registerSubscriptionsAdminPage();
}
/**
* Register the subscriptions admin page, deferring conditionals and DB queries to appropriate hooks.
*
* @since 4.14.0
*/
private function registerSubscriptionsAdminPage()
{
// Register new admin page if user hasn't chosen to use the legacy one
add_action('give_forms_page_give-subscriptions', function () {
if ($this->shouldShowLegacySubscriptionsPage()) {
return;
}
give(SubscriptionsAdminPage::class)->render();
}, 1);
// Render the "Switch to New View" button on the legacy subscriptions page
add_action('admin_head', function () {
if (!SubscriptionsAdminPage::isShowing()) {
return;
}
if (!$this->shouldShowLegacySubscriptionsPage()) {
return;
}
give(SubscriptionsAdminPage::class)->renderReactSwitch();
});
}
/**
* @since 4.14.0
*/
private function shouldShowLegacySubscriptionsPage(): bool
{
$userId = get_current_user_id();
return (bool) get_user_meta($userId, '_give_subscriptions_archive_show_legacy', true);
}
/**
* Legacy Listeners
*
* @since 2.19.6
*/
private function bootLegacyListeners()
{
Hooks::addAction('givewp_subscription_creating', DispatchGiveSubscriptionPreCreate::class);
Hooks::addAction('givewp_subscription_created', DispatchGiveSubscriptionPostCreate::class);
}
/**
* Registers database migrations with the MigrationsRunner
*
* @since 4.11.0 add AddCampaignIdColumn and AddCampaignId migrations
* @since 2.24.0
*/
private function registerMigrations()
{
/** @var MigrationsRegister $register */
$register = give(MigrationsRegister::class);
$register->addMigrations([
CreateSubscriptionTables::class,
AddPaymentModeToSubscriptionTable::class,
BackfillMissingCampaignIdForDonations::class,
AddCampaignIdColumn::class,
AddCampaignId::class,
UpdateProductID::class
]);
}
/**
* @since 4.8.0
*/
private function registerSubscriptionAdminOptions()
{
add_action('admin_enqueue_scripts', function() {
if (SubscriptionsAdminPage::isShowing()) {
give(LoadSubscriptionAdminOptions::class)();
}
});
}
}