<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class WP_OJS_SSO_Plugin {
private static $instance = null;
public static function instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->load_dependencies();
add_action( 'plugins_loaded', [ $this, 'init' ] );
}
private function load_dependencies() {
require_once WP_OJS_SSO_DIR . 'includes/class-settings.php';
require_once WP_OJS_SSO_DIR . 'includes/class-user-meta.php';
require_once WP_OJS_SSO_DIR . 'includes/class-subscription-fields.php';
require_once WP_OJS_SSO_DIR . 'includes/class-user-subscription-media.php';
require_once WP_OJS_SSO_DIR . 'includes/class-file-upload.php';
require_once WP_OJS_SSO_DIR . 'includes/class-registration.php';
require_once WP_OJS_SSO_DIR . 'includes/class-profile.php';
require_once WP_OJS_SSO_DIR . 'includes/class-oidc-bridge.php';
require_once WP_OJS_SSO_DIR . 'includes/class-oidc-server-it-locale.php';
}
public function init() {
load_plugin_textdomain( 'wp-ojs-sso-bridge', false, dirname( WP_OJS_SSO_BASENAME ) . '/languages' );
self::maybe_load_translations_from_po();
WP_OJS_SSO_OIDC_Server_It_Locale::init();
WP_OJS_SSO_Settings::instance();
WP_OJS_SSO_User_Meta::instance();
WP_OJS_SSO_Subscription_Fields::instance();
WP_OJS_SSO_File_Upload::instance();
WP_OJS_SSO_Registration::instance();
WP_OJS_SSO_Profile::instance();
WP_OJS_SSO_OIDC_Bridge::instance();
add_action( 'delete_user', [ 'WP_OJS_SSO_Subscription_Media', 'on_delete_user' ] );
add_action( 'admin_notices', [ $this, 'dependency_notice' ] );
}
/**
* WordPress only loads .mo files; without a compiled catalog, strings stay in English.
* For Italian locales, load the shipped .po via core POMO when no .mo is present.
*/
private static function maybe_load_translations_from_po() {
if ( 0 !== strpos( get_locale(), 'it' ) ) {
return;
}
if ( is_textdomain_loaded( 'wp-ojs-sso-bridge' ) ) {
return;
}
$pofile = WP_OJS_SSO_DIR . 'languages/wp-ojs-sso-bridge-it_IT.po';
if ( ! is_readable( $pofile ) ) {
return;
}
require_once ABSPATH . 'wp-includes/pomo/po.php';
$po = new PO();
if ( ! $po->import_from_file( $pofile ) ) {
return;
}
$GLOBALS['l10n']['wp-ojs-sso-bridge'] = $po;
}
public function dependency_notice() {
if ( ! is_plugin_active( 'openid-connect-server/openid-connect-server.php' ) ) {
printf(
'<div class="notice notice-warning"><p>%s</p></div>',
esc_html__( 'WP OJS SSO Bridge requires the "OpenID Connect Server" plugin by Automattic for SSO functionality.', 'wp-ojs-sso-bridge' )
);
}
}
public static function get_option( $key = null, $default = null ) {
$opts = get_option( 'wp_ojs_sso_bridge_settings', [] );
if ( null === $key ) {
return $opts;
}
return $opts[ $key ] ?? $default;
}
public static function activate() {
flush_rewrite_rules();
$upload_dir = wp_upload_dir();
$plugin_upload = $upload_dir['basedir'] . '/ojs-sso-bridge';
if ( ! is_dir( $plugin_upload ) ) {
wp_mkdir_p( $plugin_upload );
file_put_contents( $plugin_upload . '/.htaccess', "Require all denied\n" );
file_put_contents( $plugin_upload . '/index.php', "<?php\n// Silence is golden.\n" );
}
}
public static function deactivate() {
wp_clear_scheduled_hook( 'wp_ojs_sso_cleanup' );
flush_rewrite_rules();
}
}