name = $name;
add_action('init', [$this, 'init']);
}
public function enabled():bool {
return Settings::is_form_location_enabled($this->name);
}
public function init():void {
if (is_multisite()) {
$blog_id = get_current_blog_id();
switch_to_blog($blog_id);
}
$enabled = $this->enabled();
if (is_multisite()) {
restore_current_blog();
}
if (!$enabled) return;
$this->activate();
}
abstract public function activate():void;
public function render():void {
Widget::render();
}
public function process(WP_Error|null $errors = null):void {
API::process(Widget::get_token(), $errors);
}
protected function print_errors(WP_Error $errors):void {
if (!$errors->has_errors()) return;
$messages = [];
foreach ($errors->get_error_codes() as $code) {
foreach ($errors->get_error_messages($code) as $message) {
$messages[] = $message;
}
}
ob_start();
echo '
- ' . implode('
- ', $messages) . '
';
wp_die(ob_get_clean());
}
public function header():void {
if (!Settings::is_widget_floating()) return;
ob_start();
}
public function footer():void {
if (!Settings::is_widget_floating()) return;
$html = ob_get_clean();
$html = Widget::set_button_floating($html);
echo $html;
}
}
abstract class LoginLocation extends Location {
protected string $action;
protected function __construct(string $name, string $action) {
$this->action = $action;
parent::__construct($name);
}
#[Override]
public function activate(): void
{
add_action('login_head', [$this, 'header']);
add_action('login_footer', [$this, 'footer']);
}
private function get_action():string {
return isset($_REQUEST['action']) && is_string($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
}
protected function is_action():bool {
return $this->get_action() == $this->action;
}
#[Override]
public function header():void {
if (!$this->is_action()) return;
parent::header();
}
#[Override]
public function footer():void {
if (!$this->is_action()) return;
parent::footer();
}
}