LifterLMS_REST_API
LifterLMS_REST_API class.
Contents
Source Source
File: libraries/lifterlms-rest/class-lifterlms-rest-api.php
final class LifterLMS_REST_API { use LLMS_REST_Trait_Singleton; /** * Current version of the plugin. * * @var string */ public $version = '1.0.0-beta.29'; /** * Constructor. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.4 Load authentication early. * @since 1.0.0-beta.17 Only localize when loaded as an independent plugin. * * @return void */ private function __construct() { if ( ! defined( 'LLMS_REST_API_VERSION' ) ) { define( 'LLMS_REST_API_VERSION', $this->version ); } /** * When loaded as a library included by the LifterLMS core localization is handled by the LifterLMS core. * * When the plugin is loaded by itself as a plugin, we must localize it independently. */ if ( ! defined( 'LLMS_REST_API_LIB' ) || ! LLMS_REST_API_LIB ) { add_action( 'init', array( $this, 'load_textdomain' ), 0 ); } // Authentication needs to run early to handle basic auth. include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-authentication.php'; // Load everything else. add_action( 'plugins_loaded', array( $this, 'init' ), 10 ); } /** * Include files and instantiate classes. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.4 Load authentication early. * * @return void */ public function includes() { // Abstracts. include_once LLMS_REST_API_PLUGIN_DIR . 'includes/abstracts/class-llms-rest-database-resource.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/abstracts/class-llms-rest-webhook-data.php'; // Functions. include_once LLMS_REST_API_PLUGIN_DIR . 'includes/llms-rest-functions.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/server/llms-rest-server-functions.php'; // Models. include_once LLMS_REST_API_PLUGIN_DIR . 'includes/models/class-llms-rest-api-key.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/models/class-llms-rest-webhook.php'; // Classes. include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-api-keys.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-api-keys-query.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-capabilities.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-install.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-webhooks.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-webhooks-query.php'; // Include admin classes. if ( is_admin() ) { include_once LLMS_REST_API_PLUGIN_DIR . 'includes/admin/class-llms-rest-admin-settings.php'; include_once LLMS_REST_API_PLUGIN_DIR . 'includes/admin/class-llms-rest-admin-form-controller.php'; } add_action( 'rest_api_init', array( $this, 'rest_api_includes' ), 5 ); add_action( 'rest_api_init', array( $this, 'rest_api_controllers_init' ), 10 ); } /** * Retrieve an instance of the API Keys management singleton. * * @example $keys = LLMS_REST_API()->keys(); * * @since 1.0.0-beta.1 * * @return LLMS_REST_API_Keys */ public function keys() { return LLMS_REST_API_Keys::instance(); } /** * Include REST api specific files. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.9 Include memberships controller class file. * @since 1.0.0-beta.18 Include access plans controller class file. * * @return void */ public function rest_api_includes() { $includes = array( // Abstracts first. 'abstracts/class-llms-rest-controller-stubs', 'abstracts/class-llms-rest-controller', 'abstracts/class-llms-rest-users-controller', 'abstracts/class-llms-rest-posts-controller', // Functions. 'server/llms-rest-server-functions', // Controllers. 'server/class-llms-rest-api-keys-controller', 'server/class-llms-rest-access-plans-controller', 'server/class-llms-rest-courses-controller', 'server/class-llms-rest-sections-controller', 'server/class-llms-rest-lessons-controller', 'server/class-llms-rest-memberships-controller', 'server/class-llms-rest-enrollments-controller', 'server/class-llms-rest-instructors-controller', 'server/class-llms-rest-students-controller', 'server/class-llms-rest-students-progress-controller', 'server/class-llms-rest-webhooks-controller', ); foreach ( $includes as $include ) { include_once LLMS_REST_API_PLUGIN_DIR . 'includes/' . $include . '.php'; } } /** * Instantiate REST api Controllers. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.9 Init memberships controller. * @since 1.0.0-beta.18 Init access plans controller. * * @return void */ public function rest_api_controllers_init() { $controllers = array( 'LLMS_REST_API_Keys_Controller', 'LLMS_REST_Courses_Controller', 'LLMS_REST_Sections_Controller', 'LLMS_REST_Lessons_Controller', 'LLMS_REST_Memberships_Controller', 'LLMS_REST_Instructors_Controller', 'LLMS_REST_Students_Controller', 'LLMS_REST_Students_Progress_Controller', 'LLMS_REST_Enrollments_Controller', 'LLMS_REST_Webhooks_Controller', 'LLMS_REST_Access_Plans_Controller', ); foreach ( $controllers as $controller ) { $controller_instance = new $controller(); $controller_instance->register_routes(); } } /** * Include all required files and classes. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.6 Load webhooks actions at init 1 instead of init 10. * @since 1.0.0-beta.8 Load webhooks actions a little bit later: at init 6 instead of init 10, * just after all the db tables are created (init 5), * to avoid PHP warnings on first plugin activation. * @since 1.0.0-beta.22 Bump minimum required version to 6.0.0-alpha.1. * Use `llms()` in favor of deprecated `LLMS()`. * @since 1.0.0-beta.25 Perform some db clean-up on user deletion. * Bump minimum required version to 6.5.0. * @since 1.0.0-beta.26 Bump minimum required version to 7.0.2. * * @return void */ public function init() { // Only load if we have the minimum LifterLMS version installed & activated. if ( ! function_exists( 'llms' ) || version_compare( '7.0.2', llms()->version, '>' ) ) { return; } // Load includes. $this->includes(); add_action( 'init', array( $this->webhooks(), 'load' ), 6 ); add_action( 'deleted_user', array( $this, 'on_user_deletion' ) ); } /** * When a user is deleted in WordPress, delete corresponding LifterLMS REST API data. * * @since 1.0.0-beta.25 * * @param int $user_id The ID of the just deleted WP_User. * @return void */ public function on_user_deletion( $user_id ) { global $wpdb; // Delete user's API keys. $wpdb->delete( "{$wpdb->prefix}lifterlms_api_keys", array( 'user_id' => $user_id, ), array( '%d' ) );// db-cache ok. } /** * Load l10n files. * * This method is only used when the plugin is loaded as a standalone plugin (for development purposes), * otherwise (when loaded as a library from within the LifterLMS core plugin) the localization * strings are included into the LifterLMS Core plugin's po/mo files and are localized by the LifterLMS * core plugin. * * Files can be found in the following order (The first loaded file takes priority): * 1. WP_LANG_DIR/lifterlms/lifterlms-rest-LOCALE.mo * 2. WP_LANG_DIR/plugins/lifterlms-rest-LOCALE.mo * 3. WP_CONTENT_DIR/plugins/lifterlms-rest/i18n/lifterlms-rest-LOCALE.mo * * Note: The function `load_plugin_textdomain()` is not used because the same textdomain as the LifterLMS core * is used for this plugin but the file is named `lifterlms-rest` in order to allow using a separate language * file for each codebase. * * @since 1.0.0-beta.1 * @since 1.0.0-beta.17 Fixed the name of the MO loaded from the safe directory: `lifterlms-{$locale}.mo` to `lifterlms-rest-{$locale}.mo`. * Fixed double slash typo in plugin textdomain path argument. * Fixed issue causing language files to not load properly. * * @return void */ public function load_textdomain() { // Load locale. $locale = apply_filters( 'plugin_locale', get_locale(), 'lifterlms' ); // Load from the LifterLMS "safe" directory if it exists. load_textdomain( 'lifterlms', WP_LANG_DIR . '/lifterlms/lifterlms-rest-' . $locale . '.mo' ); // Load from the default plugins language file directory. load_textdomain( 'lifterlms', WP_LANG_DIR . '/plugins/lifterlms-rest-' . $locale . '.mo' ); // Load from the plugin's language file directory. load_textdomain( 'lifterlms', LLMS_REST_API_PLUGIN_DIR . '/i18n/lifterlms-rest-' . $locale . '.mo' ); } /** * Retrieve an instance of the webhooks management singleton. * * @example $webhooks = LLMS_REST_API()->webhooks(); * * @since 1.0.0-beta.1 * * @return LLMS_REST_Webhooks */ public function webhooks() { return LLMS_REST_Webhooks::instance(); }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Constructor.
- includes — Include files and instantiate classes.
- init — Include all required files and classes.
- keys — Retrieve an instance of the API Keys management singleton.
- load_textdomain — Load l10n files.
- on_user_deletion — When a user is deleted in WordPress, delete corresponding LifterLMS REST API data.
- rest_api_controllers_init — Instantiate REST api Controllers.
- rest_api_includes — Include REST api specific files.
- webhooks — Retrieve an instance of the webhooks management singleton.
Changelog Changelog
Version | Description |
---|---|
1.0.0-beta.1 | Introduced. |