Skip to content

Commit 06b58b1

Browse files
committed
Add singleton-based plugin loading mechanism
Introduce Nodeinfo class with centralized initialization pattern: - Singleton pattern with get_instance() for global access - Consolidated hook registration in register_hooks() - Admin hooks separated into register_admin_hooks() - Static activate/deactivate methods for plugin lifecycle - Simplified main plugin file to use new class
1 parent f49831f commit 06b58b1

2 files changed

Lines changed: 164 additions & 58 deletions

File tree

includes/class-nodeinfo.php

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
<?php
2+
/**
3+
* Nodeinfo Class
4+
*
5+
* @package Nodeinfo
6+
*/
7+
8+
namespace Nodeinfo;
9+
10+
use Nodeinfo\Controller\Nodeinfo as Controller_Nodeinfo;
11+
use Nodeinfo\Controller\Nodeinfo2 as Controller_Nodeinfo2;
12+
use Nodeinfo\Integration\Nodeinfo10;
13+
use Nodeinfo\Integration\Nodeinfo11;
14+
use Nodeinfo\Integration\Nodeinfo20;
15+
use Nodeinfo\Integration\Nodeinfo21;
16+
use Nodeinfo\Integration\Nodeinfo22;
17+
18+
/**
19+
* Nodeinfo Class
20+
*
21+
* @package Nodeinfo
22+
*/
23+
class Nodeinfo {
24+
/**
25+
* Instance of the class.
26+
*
27+
* @var Nodeinfo
28+
*/
29+
private static $instance;
30+
31+
/**
32+
* Text domain.
33+
*
34+
* @var string
35+
*/
36+
const TEXT_DOMAIN = 'nodeinfo';
37+
38+
/**
39+
* Whether the class has been initialized.
40+
*
41+
* @var boolean
42+
*/
43+
private $initialized = false;
44+
45+
/**
46+
* Get the instance of the class.
47+
*
48+
* @return Nodeinfo
49+
*/
50+
public static function get_instance() {
51+
if ( null === self::$instance ) {
52+
self::$instance = new self();
53+
}
54+
55+
return self::$instance;
56+
}
57+
58+
/**
59+
* Do not allow multiple instances of the class.
60+
*/
61+
private function __construct() {
62+
// Do nothing.
63+
}
64+
65+
/**
66+
* Initialize the plugin.
67+
*/
68+
public function init() {
69+
if ( $this->initialized ) {
70+
return;
71+
}
72+
73+
$this->register_hooks();
74+
$this->register_admin_hooks();
75+
76+
// Load language files.
77+
\load_plugin_textdomain(
78+
self::TEXT_DOMAIN,
79+
false,
80+
\dirname( \plugin_basename( NODEINFO_PLUGIN_FILE ) ) . '/languages'
81+
);
82+
83+
$this->initialized = true;
84+
}
85+
86+
/**
87+
* Register hooks.
88+
*/
89+
public function register_hooks() {
90+
// Initialize NodeInfo version integrations.
91+
\add_action( 'init', array( Nodeinfo10::class, 'init' ) );
92+
\add_action( 'init', array( Nodeinfo11::class, 'init' ) );
93+
\add_action( 'init', array( Nodeinfo20::class, 'init' ) );
94+
\add_action( 'init', array( Nodeinfo21::class, 'init' ) );
95+
\add_action( 'init', array( Nodeinfo22::class, 'init' ) );
96+
97+
// Register REST routes.
98+
\add_action( 'rest_api_init', array( $this, 'register_routes' ) );
99+
100+
// Add WebFinger and Host-Meta discovery.
101+
\add_filter( 'webfinger_user_data', array( Controller_Nodeinfo::class, 'jrd' ), 10, 3 );
102+
\add_filter( 'webfinger_post_data', array( Controller_Nodeinfo::class, 'jrd' ), 10, 3 );
103+
\add_filter( 'host_meta', array( Controller_Nodeinfo::class, 'jrd' ) );
104+
105+
// Add rewrite rules for well-known endpoints.
106+
\add_action( 'init', array( $this, 'add_rewrite_rules' ), 1 );
107+
}
108+
109+
/**
110+
* Register admin hooks.
111+
*/
112+
public function register_admin_hooks() {
113+
// Initialize Site Health checks.
114+
\add_action( 'admin_init', array( Health_Check::class, 'init' ) );
115+
}
116+
117+
/**
118+
* Register REST API routes.
119+
*/
120+
public function register_routes() {
121+
$nodeinfo_controller = new Controller_Nodeinfo();
122+
$nodeinfo_controller->register_routes();
123+
124+
$nodeinfo2_controller = new Controller_Nodeinfo2();
125+
$nodeinfo2_controller->register_routes();
126+
}
127+
128+
/**
129+
* Add rewrite rules for well-known endpoints.
130+
*/
131+
public function add_rewrite_rules() {
132+
\add_rewrite_rule( '^.well-known/nodeinfo', 'index.php?rest_route=/nodeinfo/discovery', 'top' );
133+
\add_rewrite_rule( '^.well-known/x-nodeinfo2', 'index.php?rest_route=/nodeinfo2/1.0', 'top' );
134+
}
135+
136+
/**
137+
* Flush rewrite rules.
138+
*
139+
* Should be called on plugin activation.
140+
*/
141+
public static function activate() {
142+
self::get_instance()->add_rewrite_rules();
143+
\flush_rewrite_rules();
144+
}
145+
146+
/**
147+
* Deactivate the plugin.
148+
*
149+
* Should be called on plugin deactivation.
150+
*/
151+
public static function deactivate() {
152+
\flush_rewrite_rules();
153+
}
154+
}

nodeinfo.php

Lines changed: 10 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -32,65 +32,17 @@
3232
require_once NODEINFO_PLUGIN_DIR . 'includes/class-nodeinfo-endpoint.php';
3333

3434
/**
35-
* Initialize the plugin.
36-
*/
37-
function nodeinfo_init() {
38-
// Initialize NodeInfo version integrations.
39-
Nodeinfo\Integration\Nodeinfo10::init();
40-
Nodeinfo\Integration\Nodeinfo11::init();
41-
Nodeinfo\Integration\Nodeinfo20::init();
42-
Nodeinfo\Integration\Nodeinfo21::init();
43-
Nodeinfo\Integration\Nodeinfo22::init();
44-
45-
// Register REST routes.
46-
add_action( 'rest_api_init', 'nodeinfo_register_routes' );
47-
48-
// Add WebFinger and Host-Meta discovery.
49-
add_filter( 'webfinger_user_data', array( Nodeinfo\Controller\Nodeinfo::class, 'jrd' ), 10, 3 );
50-
add_filter( 'webfinger_post_data', array( Nodeinfo\Controller\Nodeinfo::class, 'jrd' ), 10, 3 );
51-
add_filter( 'host_meta', array( Nodeinfo\Controller\Nodeinfo::class, 'jrd' ) );
52-
}
53-
add_action( 'init', 'nodeinfo_init', 9 );
54-
55-
/**
56-
* Initialize admin-only features.
57-
*/
58-
function nodeinfo_admin_init() {
59-
// Initialize Site Health checks.
60-
Nodeinfo\Health_Check::init();
61-
}
62-
add_action( 'admin_init', 'nodeinfo_admin_init' );
63-
64-
/**
65-
* Register REST API routes.
66-
*/
67-
function nodeinfo_register_routes() {
68-
$nodeinfo_controller = new Nodeinfo\Controller\Nodeinfo();
69-
$nodeinfo_controller->register_routes();
70-
71-
$nodeinfo2_controller = new Nodeinfo\Controller\Nodeinfo2();
72-
$nodeinfo2_controller->register_routes();
73-
}
74-
75-
/**
76-
* Add rewrite rules for well-known endpoints.
35+
* Plugin initialization function.
36+
*
37+
* @return Nodeinfo\Nodeinfo The plugin instance.
7738
*/
78-
function nodeinfo_add_rewrite_rules() {
79-
add_rewrite_rule( '^.well-known/nodeinfo', 'index.php?rest_route=/nodeinfo/discovery', 'top' );
80-
add_rewrite_rule( '^.well-known/x-nodeinfo2', 'index.php?rest_route=/nodeinfo2/1.0', 'top' );
39+
function nodeinfo_plugin() {
40+
return Nodeinfo\Nodeinfo::get_instance();
8141
}
82-
add_action( 'init', 'nodeinfo_add_rewrite_rules', 1 );
8342

84-
/**
85-
* Flush rewrite rules on activation.
86-
*/
87-
function nodeinfo_activate() {
88-
nodeinfo_add_rewrite_rules();
89-
flush_rewrite_rules();
90-
}
91-
register_activation_hook( __FILE__, 'nodeinfo_activate' );
43+
// Initialize the plugin.
44+
nodeinfo_plugin()->init();
9245

93-
/**
94-
* Flush rewrite rules on deactivation.
95-
*/
96-
register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
46+
// Register activation and deactivation hooks.
47+
register_activation_hook( __FILE__, array( Nodeinfo\Nodeinfo::class, 'activate' ) );
48+
register_deactivation_hook( __FILE__, array( Nodeinfo\Nodeinfo::class, 'deactivate' ) );

0 commit comments

Comments
 (0)