felixarntz/wp-site-identity

View on GitHub
wp-site-identity.php

Summary

Maintainability
A
3 hrs
Test Coverage
<?php
/**
 * Plugin initialization file
 *
 * @package WPSiteIdentity
 * @since 1.0.0
 *
 * @wordpress-plugin
 * Plugin Name: WP Site Identity
 * Plugin URI:  https://github.com/felixarntz/wp-site-identity
 * Description: Enables you to manage your site identity data and brand in one centralized location.
 * Version:     1.0.0
 * Author:      Felix Arntz
 * Author URI:  https://leaves-and-love.net
 * License:     GNU General Public License v2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: wp-site-identity
 * Tags:        site identity, personal data, business data, brand, appearance, centralized, customization, customizer, widgets, shortcodes
 */

/**
 * Loads the plugin files.
 *
 * @since 1.0.0
 */
function wpsi_load() {
    $classes_dir = plugin_dir_path( __FILE__ ) . 'src/';

    // Main.
    require_once $classes_dir . 'class-wp-site-identity.php';
    require_once $classes_dir . 'class-wp-site-identity-service-container.php';
    require_once $classes_dir . 'class-wp-site-identity-service-reference.php';
    require_once $classes_dir . 'class-wp-site-identity-data.php';
    require_once $classes_dir . 'class-wp-site-identity-owner-data.php';
    require_once $classes_dir . 'class-wp-site-identity-brand-data.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap-settings.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap-shortcodes.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap-widgets.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap-admin-pages.php';
    require_once $classes_dir . 'class-wp-site-identity-bootstrap-customizer.php';

    // Exceptions.
    require_once $classes_dir . 'exceptions/class-wp-site-identity-admin-page-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-service-already-registered-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-service-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-setting-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-setting-validation-error-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-settings-form-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-settings-section-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-settings-field-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-shortcode-not-found-exception.php';
    require_once $classes_dir . 'exceptions/class-wp-site-identity-widget-not-found-exception.php';

    // Settings.
    require_once $classes_dir . 'settings/interface-wp-site-identity-setting-registry.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-standard-setting-registry.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-setting.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-aggregate-setting.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-setting-factory.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-setting-feedback-handler.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-setting-validator.php';
    require_once $classes_dir . 'settings/class-wp-site-identity-setting-sanitizer.php';

    // Admin pages.
    require_once $classes_dir . 'admin-pages/interface-wp-site-identity-admin-page-registry.php';
    require_once $classes_dir . 'admin-pages/class-wp-site-identity-standard-admin-page-registry.php';
    require_once $classes_dir . 'admin-pages/class-wp-site-identity-admin-page.php';
    require_once $classes_dir . 'admin-pages/class-wp-site-identity-admin-menu-page.php';
    require_once $classes_dir . 'admin-pages/class-wp-site-identity-admin-submenu-page.php';
    require_once $classes_dir . 'admin-pages/class-wp-site-identity-admin-page-factory.php';

    // Settings forms.
    require_once $classes_dir . 'admin-pages/settings-forms/interface-wp-site-identity-settings-form-registry.php';
    require_once $classes_dir . 'admin-pages/settings-forms/class-wp-site-identity-standard-settings-form-registry.php';
    require_once $classes_dir . 'admin-pages/settings-forms/class-wp-site-identity-settings-form.php';
    require_once $classes_dir . 'admin-pages/settings-forms/class-wp-site-identity-settings-form-factory.php';

    // Settings sections.
    require_once $classes_dir . 'admin-pages/settings-sections/interface-wp-site-identity-settings-section-registry.php';
    require_once $classes_dir . 'admin-pages/settings-sections/class-wp-site-identity-standard-settings-section-registry.php';
    require_once $classes_dir . 'admin-pages/settings-sections/class-wp-site-identity-settings-section.php';
    require_once $classes_dir . 'admin-pages/settings-sections/class-wp-site-identity-settings-section-factory.php';

    // Settings fields.
    require_once $classes_dir . 'admin-pages/settings-fields/interface-wp-site-identity-settings-field-registry.php';
    require_once $classes_dir . 'admin-pages/settings-fields/class-wp-site-identity-standard-settings-field-registry.php';
    require_once $classes_dir . 'admin-pages/settings-fields/class-wp-site-identity-settings-field.php';
    require_once $classes_dir . 'admin-pages/settings-fields/class-wp-site-identity-settings-field-factory.php';
    require_once $classes_dir . 'admin-pages/settings-fields/class-wp-site-identity-settings-field-control-callbacks.php';

    // Shortcodes.
    require_once $classes_dir . 'shortcodes/interface-wp-site-identity-shortcode-registry.php';
    require_once $classes_dir . 'shortcodes/class-wp-site-identity-standard-shortcode-registry.php';
    require_once $classes_dir . 'shortcodes/class-wp-site-identity-shortcode.php';
    require_once $classes_dir . 'shortcodes/class-wp-site-identity-shortcode-factory.php';

    // Widgets.
    require_once $classes_dir . 'widgets/interface-wp-site-identity-widget-registry.php';
    require_once $classes_dir . 'widgets/class-wp-site-identity-standard-widget-registry.php';
    require_once $classes_dir . 'widgets/class-wp-site-identity-widget.php';
    require_once $classes_dir . 'widgets/class-wp-site-identity-widget-factory.php';
}

/**
 * Gets the plugin main class instance.
 *
 * If it does not exist yet, it will be instantiated and its hooks will be added.
 *
 * @since 1.0.0
 *
 * @return WP_Site_Identity Plugin main class instance.
 */
function wpsi() {
    static $wp_site_identity = null;

    if ( null === $wp_site_identity ) {
        $wp_site_identity = new WP_Site_Identity( __FILE__, '1.0.0' );
        $wp_site_identity->add_hooks();
    }

    return $wp_site_identity;
}

/**
 * Shows an admin notice if the WordPress version installed is not supported.
 *
 * @since 1.0.0
 */
function wpsi_requirements_notice() {
    $plugin_file = plugin_basename( __FILE__ );

    // WordPress before 4.9 didn't have a dedicated capability for this.
    if ( version_compare( $GLOBALS['wp_version'], '4.9', '<' ) ) {
        if ( ! current_user_can( 'activate_plugins' ) ) {
            return;
        }
    } else {
        if ( ! current_user_can( 'deactivate_plugin', $plugin_file ) ) {
            return;
        }
    }

    $deactivate_url = wp_nonce_url( add_query_arg( array(
        'action'        => 'deactivate',
        'plugin'        => $plugin_file,
        'plugin_status' => 'all',
    ), self_admin_url( 'plugins.php' ) ), 'deactivate-plugin_' . $plugin_file );

    ?>
    <div class="notice notice-warning is-dismissible">
        <p>
            <?php
            /* translators: %s: URL to deactivate plugin */
            echo wp_kses( sprintf( __( 'Please note: WP Site Identity requires WordPress 4.7 or higher. <a href="%s">Deactivate plugin</a>.', 'wp-site-identity' ), esc_url( $deactivate_url ) ), array(
                'a' => array(
                    'href' => array(),
                ),
            ) );
            ?>
        </p>
    </div>
    <?php
}

/**
 * Loads the plugin textdomain.
 *
 * @since 1.0.0
 */
function wpsi_load_textdomain() {
    load_plugin_textdomain( 'wp-site-identity', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
}
add_action( 'plugins_loaded', 'wpsi_load_textdomain', 1 );

if ( version_compare( $GLOBALS['wp_version'], '4.7', '<' ) ) {
    add_action( 'admin_notices', 'wpsi_requirements_notice' );
} else {
    wpsi_load();
    add_action( 'plugins_loaded', 'wpsi' );
}