- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
151 lines
3.5 KiB
PHP
Executable File
151 lines
3.5 KiB
PHP
Executable File
<?php
|
|
|
|
namespace FluentMail\App\Hooks\Handlers;
|
|
|
|
use FluentMail\Includes\Core\Application;
|
|
use FluentMail\App\Hooks\Handlers\AdminMenuHandler;
|
|
use FluentMail\App\Hooks\Handlers\SchedulerHandler;
|
|
use FluentMail\App\Hooks\Handlers\InitializeSiteHandler;
|
|
use WP_REST_Request;
|
|
|
|
class ActionsRegistrar
|
|
{
|
|
/**
|
|
* Application instance.
|
|
*
|
|
* @var Application
|
|
*/
|
|
protected $app;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param Application $app
|
|
*/
|
|
public function __construct(Application $app)
|
|
{
|
|
$this->app = $app;
|
|
}
|
|
|
|
/**
|
|
* Alternative static constructor.
|
|
*
|
|
* @param Application $app
|
|
* @return static
|
|
*/
|
|
public static function init(Application $app)
|
|
{
|
|
$instance = new static($app);
|
|
$instance->registerHooks();
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* Register all core hooks and REST routes.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function registerHooks()
|
|
{
|
|
$this->registerAdminMenu();
|
|
$this->registerScheduler();
|
|
$this->registerSiteInitialization();
|
|
$this->registerCustomActions();
|
|
$this->registerRestRoutes();
|
|
}
|
|
|
|
/**
|
|
* Register admin menu and notices.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerAdminMenu()
|
|
{
|
|
$adminMenuHandler = new AdminMenuHandler($this->app);
|
|
$adminMenuHandler->addFluentMailMenu();
|
|
|
|
$this->app->addAction('admin_notices', 'AdminMenuHandler@maybeAdminNotice');
|
|
}
|
|
|
|
/**
|
|
* Register background scheduler hooks.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerScheduler()
|
|
{
|
|
(new SchedulerHandler)->register();
|
|
}
|
|
|
|
/**
|
|
* Register site-level initialization logic.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerSiteInitialization()
|
|
{
|
|
(new InitializeSiteHandler)->addHandler();
|
|
}
|
|
|
|
/**
|
|
* Register custom application actions.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerCustomActions()
|
|
{
|
|
$this->app->addCustomAction(
|
|
'handle_exception', 'ExceptionHandler@handle'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Register REST API routes.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function registerRestRoutes()
|
|
{
|
|
$this->app->addAction('rest_api_init', function () {
|
|
register_rest_route('fluent-smtp', '/outlook_callback/', [
|
|
'methods' => 'GET',
|
|
'callback' => [$this, 'handleOutlookCallback'],
|
|
'permission_callback' => [$this, 'verifyOutlookCallbackState'],
|
|
]);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Handle the Outlook OAuth callback.
|
|
*
|
|
* @param WP_REST_Request $request
|
|
* @return void
|
|
*/
|
|
public function handleOutlookCallback(WP_REST_Request $request)
|
|
{
|
|
$code = $request->get_param('code');
|
|
|
|
$output = $this->app->view->make('admin.html_code', [
|
|
'title' => 'Your Access Code',
|
|
'body' => sprintf(
|
|
'<p>Copy the following code and paste in the fluentSMTP settings</p><textarea readonly>%s</textarea>',
|
|
sanitize_textarea_field($code)
|
|
),
|
|
]);
|
|
|
|
wp_die($output, 'Access Code');
|
|
}
|
|
|
|
/**
|
|
* Verify the 'state' parameter in the OAuth callback.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function verifyOutlookCallbackState()
|
|
{
|
|
$state = $_REQUEST['state'] ?? null;
|
|
|
|
return $state === get_option('_fluentmail_last_generated_state');
|
|
}
|
|
}
|