Sindbad~EG File Manager

Current Path : /home/frekansk/public_html/wp-content/plugins/wp-rollback/src/Rollbacks/
Upload File :
Current File : /home/frekansk/public_html/wp-content/plugins/wp-rollback/src/Rollbacks/ServiceProvider.php

<?php

/**
 * Service Provider
 *
 * This file is responsible for registering and booting the service provider for plugin admin dashboard.
 *
 * @package WpRollback\Rollbacks
 * @since 3.0.0
 */

declare(strict_types=1);

namespace WpRollback\Free\Rollbacks;

use WpRollback\SharedCore\Core\Exceptions\BindingResolutionException;
use WpRollback\SharedCore\Core\Hooks;
use WpRollback\SharedCore\Core\Contracts\ServiceProvider as ServiceProviderContract;
use WpRollback\Free\Rollbacks\Actions\RegisterAdminMenu;
use WpRollback\Free\Rollbacks\PluginRollback\Actions\AddPluginRollbackLinks;
use WpRollback\Free\Rollbacks\PluginRollback\Actions\PreCurrentActivePlugins;
use WpRollback\Free\Rollbacks\ThemeRollback\Actions\ThemeUpgrader;
use WpRollback\Free\Rollbacks\ThemeRollback\Views\ThemeRollbackButton;
use WpRollback\SharedCore\Core\SharedCore;
use WpRollback\Free\Core\Constants;
use WpRollback\SharedCore\Rollbacks\DTO\RollbackRequestDTO;
use WpRollback\SharedCore\Rollbacks\Registry\RollbackStepRegisterer;

use WpRollback\Free\PluginSetup\PluginScripts;
use WpRollback\SharedCore\Rollbacks\ToolsPage\ToolsPage;

/**
 * Class ServiceProvider.
 *
 * @since 3.0.0`
 */
class ServiceProvider implements ServiceProviderContract
{
    /**
     * @inheritdoc
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    public function register(): void
    {
        // Register RollbackRequestDTO with Constants dependency
        SharedCore::container()->singleton(RollbackRequestDTO::class, function ($container) {
            return new RollbackRequestDTO($container->make(Constants::class));
        });

        // Register AddPluginRollbackLinks with Constants dependency
        SharedCore::container()->singleton(AddPluginRollbackLinks::class, function ($container) {
            return new AddPluginRollbackLinks($container->make(Constants::class));
        });

        // Register PluginScripts
        SharedCore::container()->singleton(PluginScripts::class);
        
        // Override the shared RollbackStepRegisterer to exclude ValidatePackage and add UpsellValidatePackage
        // This replaces the shared registration to customize steps for the free plugin
        SharedCore::container()->singleton(RollbackStepRegisterer::class, function () {
            $registerer = new RollbackStepRegisterer();
            // Register base steps without ValidatePackage (pro feature)
            $registerer->addStep(\WpRollback\SharedCore\Rollbacks\RollbackSteps\DownloadAsset::class);
            $registerer->addStep(\WpRollback\SharedCore\Rollbacks\RollbackSteps\BackupAsset::class);
            // Add the upsell step instead of actual validation
            $registerer->addStep(\WpRollback\Free\Rollbacks\RollbackSteps\UpsellValidatePackage::class);
            $registerer->addStep(\WpRollback\SharedCore\Rollbacks\RollbackSteps\ReplaceAsset::class);
            $registerer->addStep(\WpRollback\SharedCore\Rollbacks\RollbackSteps\Cleanup::class);
            return $registerer;
        });
        
        // Note: Other shared services (ToolsPage, BackupAsset, BackupService, etc.)
        // are provided by the SharedCore\Rollbacks\ServiceProvider loaded before this one
    }

    /**
     * @inheritDoc
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    public function boot(): void
    {
        $this->bootToolsPage();
        $this->bootPluginRollback();
        $this->bootThemeRollback();
        $this->addMultiSiteSupport();

        // Initialize PluginScripts
        $scripts = SharedCore::container()->make(PluginScripts::class);
        $scripts->initialize();
        
        // Note: Backup directory setup is now handled by the shared RollbackServiceProvider
    }


    /**
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    private function bootToolsPage(): void
    {
        Hooks::addAction('admin_menu', RegisterAdminMenu::class);
    }

    /**
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    private function bootPluginRollback(): void
    {
        // Register factory for AddPluginRollbackLinks
        Hooks::registerFactory(
            AddPluginRollbackLinks::class,
            function () {
                return SharedCore::container()->make(AddPluginRollbackLinks::class);
            }
        );

        Hooks::addFilter('plugin_action_links', AddPluginRollbackLinks::class, '__invoke', 20, 4);
        Hooks::addAction('pre_current_active_plugins', PreCurrentActivePlugins::class, '__invoke', 20, 1);
    }

    /**
     * @since 3.0.0
     * @return void
     * @throws BindingResolutionException
     */
    private function bootThemeRollback(): void
    {
        // Theme rollback.
        Hooks::addAction('admin_enqueue_scripts', ThemeRollbackButton::class);
    }

    /**
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    private function addMultiSiteSupport(): void
    {
        // For multisite support
        Hooks::addAction('network_admin_menu', self::class, 'registerMultisiteMenu');
        
        Hooks::addFilter('network_admin_plugin_action_links', AddPluginRollbackLinks::class, '__invoke', 20, 4);
    }
    
    /**
     * Register multisite menu.
     *
     * @since 3.0.0
     * @throws BindingResolutionException
     */
    public static function registerMultisiteMenu(): void
    {
        $adminMenu = SharedCore::container()->make(RegisterAdminMenu::class);
        $adminMenu->registerMultisiteMenu();
    }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists